package com.slowfly.rule.engine.util;

import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;

import java.util.Collections;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 文本占位符处理工具类
 */
@Slf4j
public class TextUtil {

    private final static Pattern pattern = Pattern.compile("\\$\\{\\d+}");

    /**
     * 获取文本上的占位符
     *
     * @param text 文本
     * @return 占位符
     */
    public static Set<Integer> getVariables(String text) {
        if (StringUtils.isBlank(text) || !text.contains("${")) {
            return Collections.emptySet();
        }
        Set<Integer> variables = Sets.newHashSet();
        // 使用正则表达式一次性匹配所有的"${数字}"序列
        Matcher matcher = pattern.matcher(text);

        while (matcher.find()) {
            // 提取匹配的部分，去掉"${"和"}"
            String variableStr = matcher.group().substring(2, matcher.group().length() - 1);
            try {
                // 将提取的字符串转换为整数并添加到集合中
                variables.add(Integer.parseInt(variableStr));
            } catch (NumberFormatException e) {
                log.error("Invalid integer in the variable: {}", variableStr, e);
            }
        }
        return variables;
    }
}